function _regeneratorRuntime() {
  return {
    wrap(iteratorFn) {
      // iteratorFn 此函数要多次执行

      const _context = {
        next: 0,
        done: false,
        sent: undefined,
        abrupt(type, value) {
          if (type === "return") {
            this.stop();
            return value
          }
        },
        stop() {
          this.done = true;
        },
      };

      function resume() {
        const value = iteratorFn(_context);
        return { value, done: _context.done };
      }

      return {
        next(value) {
          _context.sent = value; // 每次调用next的时候传递的参数
          return resume();
        },
      };
    },
  };
}

function getLesson() {
  var a, b;
  return _regeneratorRuntime().wrap(function getLesson$(_context) {
    switch ((_context.prev = _context.next)) {
      case 0:
        _context.next = 2;
        return "语文";
      case 2:
        a = _context.sent;
        console.log(a, 14);
        _context.next = 6;
        return "数学";
      case 6:
        b = _context.sent;
        console.log(b, 16);
        return _context.abrupt("return");
      case 9:
      case "end":
        return _context.stop();
    }
  });
}

let it = getLesson(); // 这里是给函数传递参数
// 碰到yield 就暂停执行，如果继续则调用next
console.log(it.next()); // 第一次next中传递参数没有任何意义
console.log(it.next("第一次的处理后结果")); // 第二次调用next的时候传参是给第一次的yield做返回值的
console.log(it.next("第二次的处理后结果"));


console.log(it.next("第二次的处理后结果"));
console.log(it.next("第二次的处理后结果"));

// es6 基础  it.throw()  it.return()